import request from '@/utils/request'

// 防抖处理 - 避免短时间内重复请求
const pendingRequests = {};
const debounceTime = 500; // 毫秒

function debounceRequest(key, requestFn) {
  // 如果已经有相同的请求正在进行中，取消之前的请求
  if (pendingRequests[key]) {
    clearTimeout(pendingRequests[key].timer);
  }
  
  return new Promise((resolve, reject) => {
    // 创建新的延迟执行的请求
    pendingRequests[key] = {
      timer: setTimeout(() => {
        requestFn()
          .then(response => {
            delete pendingRequests[key];
            resolve(response);
          })
          .catch(error => {
            delete pendingRequests[key];
            reject(error);
          });
      }, debounceTime),
      resolve,
      reject
    };
  });
}

// 查询所有父分类
export function listAllParentCategories() {
  // 使用Promise包装，确保即使请求出错也能返回一个有效的Promise
  return new Promise((resolve, reject) => {
    // 使用防抖处理
    debounceRequest('parentCategories', () => {
  return request({
    url: '/ldzl-basic/wlfl/find',
        method: 'post'
      });
    })
    .then(response => {
      resolve(response);
    })
    .catch(error => {
      console.error("父分类API请求失败:", error);
      // 返回一个空数据的成功响应，而不是直接拒绝Promise
      resolve({
        code: 200,
        data: [],
        msg: "API请求失败，返回空数据"
      });
    });
  });
}

// 查询完整的父子分类结构
export function listAllCategoriesWithChildren() {
  // 使用Promise包装，确保即使请求出错也能返回一个有效的Promise
  return new Promise((resolve, reject) => {
    // 使用防抖处理
    debounceRequest('categoriesWithChildren', () => {
  return request({
    url: '/ldzl-basic/wlfl/find',
    method: 'post'
      });
    })
    .then(response => {
      resolve(response);
    })
    .catch(error => {
      console.error("完整分类结构API请求失败:", error);
      // 返回一个空数据的成功响应，而不是直接拒绝Promise
      resolve({
        code: 200,
        data: [],
        msg: "API请求失败，返回空数据"
      });
    });
  });
}

// 查询物料分类列表
export function listMaterialCategory(data) {
  // 确保请求参数与后端API需求一致
  const queryParams = {};
  
  // 添加关键字搜索条件
  if (data && data.keyword) {
    queryParams.material_classification_code = data.keyword;
  }
  
  // 添加物料分类名称搜索条件
  if (data && data.material_classification_name) {
    queryParams.material_classification_name = data.material_classification_name;
  }
  
  // 添加物料子分类名称搜索条件
  if (data && data.material_subcategory_name) {
    queryParams.material_subcategory_name = data.material_subcategory_name;
  }
  
  // 添加父分类ID参数，用于查询特定父分类下的子分类
  if (data && data.parentId) {
    queryParams.material_classification_id = data.parentId;
  }
  
  // 生成请求的唯一键，用于防抖处理
  const requestKey = `materialCategory_${JSON.stringify(queryParams)}`;
  
  // 打印参数调试
  console.log('发送至后端的查询参数:', queryParams);
  
  // 使用Promise包装，确保即使请求出错也能返回一个有效的Promise
  return new Promise((resolve, reject) => {
    // 使用防抖处理
    debounceRequest(requestKey, () => {
  return request({
    url: '/ldzl-basic/wlflz/find',
    method: 'post',
    data: queryParams
      });
    })
    .then(response => {
      resolve(response);
    })
    .catch(error => {
      console.error("物料分类API请求失败:", error);
      // 返回一个空数据的成功响应，而不是直接拒绝Promise
      resolve({
        code: 200,
        data: [],
        msg: "API请求失败，返回空数据"
      });
    });
  });
}

// // 查询物料分类详细
// export function getMaterialCategory(id) {
//   return request({
//     url: '/ldzl-basic/wlflz/' + id,
//     method: 'get'
//   })
// }

// 新增物料分类
export function addMaterialCategory(data) {
  return request({
    url: '/ldzl-basic/wlflz',
    method: 'post',
    data: data
  })
}

// 修改物料分类
export function updateMaterialCategory(data) {
  return request({
    url: '/ldzl-basic/wlflz/up',
    method: 'put',
    data: data
  })
}

// 删除物料分类
export function delMaterialCategory(id) {
  return request({
    url: '/ldzl-basic/wlflz/dp/' + id,
    method: 'put'
  })
}

// // 导出物料分类
// export function exportMaterialCategory(query) {
//   return request({
//     url: '/ldzl-basic/wlflz/export',
//     method: 'get',
//     params: query
//   })
// } 